package top.shiyiri.exer2;

/**
 * @author Aunean
 * @date 2021/12/28
 */

/*
银行有一个账户。
有两个储户分别向同一个账户存3000元，每次存1000，存3次。每次存完打印账户余额

1.是否是多线程问题？ 是，两个存户线程
2.是否有共享数据？  有，账户
3.是否有线程安全问题？  有
4.需要考虑如何解决线程安全问题？  同步机制：有三种方式
 */
class Account {
    private double balance;

    public Account(double balance) {
        this.balance = balance;
    }

    public Account() {
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    //存钱
    public void deposit(double amt) {
        synchronized (Account.class) {
            if (amt > 0) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                balance += amt;
                System.out.println(Thread.currentThread().getName() + " 存钱成功，当前余额为：" + balance);
            }
        }
    }
}

class Customer extends Thread {

    private Account acct;

    public Customer(Account acct) {
        this.acct = acct;
    }

    @Override
    public void run() {

        for (int i = 0; i < 3; i++) {
            acct.deposit(1000);
        }

    }
}

public class AccountTest {

    public static void main(String[] args) {

        Account acct = new Account();
        Customer c1 = new Customer(acct);
        Customer c2 = new Customer(acct);

        c1.setName("甲");
        c2.setName("乙");

        c1.start();
        c2.start();
    }
}
